package com.linkit.main;

import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.RelativeLayout;

import com.linkit.main.widget.ExtendedTextView;
import com.linkit.utils.Constants;
import com.linkit.utils.ScreenUtils;
import com.linkit.utils.Utils;

public class DialogManager {
	private MainActivity main;
	/** Màn hình dialog */
	private RelativeLayout dialogLayout;
	/** Khung chứa nội dung dialog */
	private RelativeLayout dialogContent;

	private boolean isVisible;

	public DialogManager(MainActivity activity) {
		main = activity;
		dialogLayout = (RelativeLayout) main.findViewById(R.id.dialog_control);
		dialogContent = (RelativeLayout) main.findViewById(R.id.dialog_content);
	}

	/**
	 * Đưa view mới vào trong dialog và hiển thị nó lên màn hình
	 * 
	 * @param title
	 *            : Tiêu đề của dialog
	 * @param v
	 *            : view nội dung của dialog
	 * @param isShowIcon
	 *            : cho hiện icon trên tiêu đề không
	 */

	public void showDialogContent(int iconResId, String title, View v) {

		DialogLayout dialog = new DialogLayout(main, dialogContent);
		dialog.showDialog(v);
		dialog.setHeaderTitle(title);
		dialog.setIconHeader(iconResId);

		// Không bắt sự kiện ontouch bất cứ thành phần nào khi dialog hiển
		// thị
		dialogLayout.setVisibility(View.VISIBLE);
		dialogLayout.setOnTouchListener(new OnTouchListener() {
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				return true;
			}
		});
		new Handler().postDelayed(new Runnable() {

			@Override
			public void run() {
				dialogLayout.setOnTouchListener(new OnTouchListener() {
					@Override
					public boolean onTouch(View v, MotionEvent event) {
						hideDialog(null);
						return true;
					}
				});
			}
		}, DialogLayout.TIME_TRANSLATE_DELAY);

		dialog.layout.setOnTouchListener(new DisableOnTouchImpl());
		isVisible = true;
	}

	/**
	 * Ẩn dialog và thực hiện callback lại nhiệm vụ khác
	 */
	public void hideDialog(final CallbackHideDialog callback) {

		// Nếu dialog ẩn thì hủy
		if (!isVisible)
			return;

		isVisible = false;

		dialogLayout.setOnTouchListener(new DisableOnTouchImpl());

		// Tạo animation ẩn cho dialog
		GeneralAnimationUtils.startHideDialog(dialogLayout,
				new FinishedCallback() {

					@Override
					public void finish() {
						dialogLayout.setVisibility(View.GONE);
						if (callback != null) {
							callback.excecute();
						}
					}
				});
	}

	/**
	 * Ẩn dialog
	 */
	public void hideDialog() {

		hideDialog(null);
	}

	public boolean isVisible() {
		return isVisible;
	}

	public void setVisible(boolean isVisible) {
		this.isVisible = isVisible;
	}

	/**
	 * Hiện thị progress bar để đợi dữ liệu đang yêu cầu từ server
	 * 
	 * @param waitingReason
	 *            : thông tin hiện thị chờ dữ liệu
	 * @param callback
	 *            : null thì không thực hiện hàm callback và ngược lại
	 */
	public void showWaiting(final CallbackHideDialog callback) {

		// thiết lập trạng thái hiện thị waiting
		isVisible = true;

		RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
				LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
		LinearLayout layoutDialog = new LinearLayout(main);
		layoutDialog = (LinearLayout) LinearLayout.inflate(main,
				R.layout.dialog_waiting, layoutDialog);

		dialogContent.removeAllViews();
		dialogContent.addView(layoutDialog, layoutParams);
		dialogLayout.setVisibility(View.VISIBLE);
		dialogContent.setBackgroundColor(Utils
				.getColor(R.color.full_transperent));
		// Không bắt sự kiện ontouch bất cứ thành phần nào khi dialog hiển thị
		dialogLayout.setOnTouchListener(new DisableOnTouchImpl());

		// Đặt timeout cho quá trình đợi tín hiệu gps
		new Handler().postDelayed(new Runnable() {
			@Override
			public void run() {
				hideDialog(callback);
			}
		}, Constants.TIMEOUT_WAITING);
	}

	/**
	 * Hiện thị thông báo cho người dùng bao gồm: icon, title, description,
	 * button
	 * 
	 * @param title
	 *            : Tiêu đề thông báo
	 * @param descritpion
	 *            : Nội dụng thông báo
	 */
	public void showAlert(String title, String descritpion) {

		LinearLayout layoutDialog = new LinearLayout(main);
		layoutDialog = (LinearLayout) LinearLayout.inflate(main,
				R.layout.dialog_alerts, layoutDialog);

		// Thiết lập thông báo
		ExtendedTextView alertDescription = (ExtendedTextView) layoutDialog
				.findViewById(R.id.alert_description);
		alertDescription.setText(descritpion);
		alertDescription.setTextSize(ScreenUtils.getDialogItemFontSize());
		// Thiết lập kích thước footer
		showDialogContent(R.drawable.error, title, layoutDialog);

		ExtendedTextView btnOkAlert = (ExtendedTextView) layoutDialog
				.findViewById(R.id.alert_dialog_btn);
		btnOkAlert.setTextSize(ScreenUtils.getDialogItemFontSize());
		btnOkAlert.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				hideDialog(null);
			}
		});
	}
	public RelativeLayout getDialogLayout() {
		return dialogLayout;
	}

	public RelativeLayout getDialogContent() {
		return dialogContent;
	}

}
